package com.xebest.web.mapper.read;


import com.xebest.web.form.XeVenOrderRefundQueryForm;
import com.xebest.web.model.XeVenOrderRefundDetailEntity;
import com.xebest.web.model.XeVenOrderRefundEntity;
import com.xebest.web.view.XeVenOrderRefundView;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 退款单相关mapper
 *
 * @author chenjing
 */
@Repository
public interface XeVenOrderRefundReadMapper {

    /**
     * 根据订单号查询已退款金额
     *
     * @author chenjing
     */
    BigDecimal getRefundEdAmountByOrderId(@Param("orderId") String orderId, @Param("userCode") String userCode);

    /**
     * 根据售后单号查询退款单信息
     *
     * @author chenjing
     */
    XeVenOrderRefundEntity selectByAfterSalesCode(String afterSalesCode);

    /**
     * 根据退款单号查询退款单信息
     *
     * @author chenjing
     */
    XeVenOrderRefundEntity selectByRefundCode(@Param("refundCode") String refundCode, @Param("userCode") String userCode);

    /**
     * 查询退款单列表
     *
     * @author chenjing
     */
    List<XeVenOrderRefundView> getOrderRefundList(XeVenOrderRefundQueryForm form);

    /**
     * 根据订单号（商品sku）查询该订单下商品的退款金额
     *
     * @param proSku 此参数为空，是查询该订单下所有商品的退款金额，若不为空，则是查询单个商品的退款金额
     * @author chenjing
     */
    List<XeVenOrderRefundDetailEntity> queryRefundAmountByOrderId(@Param("orderId") String orderId, @Param("proSku") String proSku);

    /**
     * 根据订单号和userCode查询已创建的差异退款单条数
     *
     * @author chenjing
     */
    Integer queryCountByOrderId(Map paramMap);

    /**
     * 根据退款单号数组,退款单状态 支付渠道查询退款单列表
     *
     * @author chenjing
     */
    List<XeVenOrderRefundEntity> queryRefundByCodes(@Param("formCodes") String[] formCodes, @Param("userCode") String userCode,
                                                    @Param("refundStatus") int refundStatus, @Param("payChannel") int[] payChannel);
}